// frontend/src/utils/request.js
import axios from 'axios'
import { useUserStore } from '../store/user' // P5 新增: 导入 Pinia store
import { ElMessage } from 'element-plus' // P5 新增: 导入 ElMessage 用于错误提示

// 创建 Axios 实例
const service = axios.create({
  // 关键: 指向 P2/P3 运行的后端服务器
  baseURL: 'http://localhost:3000/api', 
  timeout: 5000 // 请求超时
})

// (P5 修改) 请求拦截器: 用于附加 Token
service.interceptors.request.use(
  config => {
    // P5 注意: 必须在拦截器 *内部* 获取 store 实例
    // 确保 Pinia 已经被 main.js 'use' 过了
    try {
      const userStore = useUserStore() 
      if (userStore.isLoggedIn && userStore.token) {
        config.headers['Authorization'] = 'Bearer ' + userStore.token
      }
    } catch (error) {
      // 捕获 Pinia 尚未初始化的错误 (虽然在 Vue 3 setup 流程中很少见)
      console.warn('Pinia store (useUserStore) not available yet during request interception.')
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// (P5 可选增强) 响应拦截器: 用于统一处理错误
service.interceptors.response.use(
  response => {
    // API 成功响应 (success: true), 直接返回 response
    return response
  },
  error => {
    // API 失败响应 (http 状态码 4xx, 5xx)
    if (error.response) {
      // P5: 使用 ElMessage 显示后端返回的错误信息
      ElMessage.error(error.response.data.message || '服务器错误')

      if (error.response.status === 401) {
        // P5: 如果是 401 (Token 无效或过期), 强制用户退出登录
        try {
          const userStore = useUserStore()
          userStore.logout() // 调用 Pinia 的 logout action
          // 跳转到登录页 (在路由守卫中也会处理, 这里是双重保险)
          window.location.href = '/login'
        } catch (e) {
          console.error('Failed to auto-logout on 401 error', e)
        }
      }
    }
    return Promise.reject(error)
  }
)

// 导出实例
export default service